package com.borened.common.core.constant;

/**
 * 安全认证类 全局常量
 *
 * @author: cch
 * @since: 2021/11/5
 */
public interface SecurityConstants {

    /************************* 业务常量 ************************/

    String REQUEST_SOURCE = "efarm-request-source";

    /**
     * 认证请求头key
     */
    String AUTHORIZATION_KEY = "Authorization";

    /**
     * JWT令牌前缀
     */
    String JWT_PREFIX = "Bearer ";

    /**
     * Basic认证前缀
     */
    String BASIC_PREFIX = "Basic ";

    /**
     * JWT载体key
     */
    String JWT_PAYLOAD_KEY = "payload";

    /**
     * JWT ID 唯一标识
     */
    String JWT_JTI = "jti";

    /**
     * JWT ID 唯一标识
     */
    String JWT_EXP = "exp";

    String JWT_USER_ID_KEY = "user_id";

    String JWT_USER_NAME_KEY = "user_name";
    String JWT_OPENID_KEY = "openid";
    /**
     * jwt应用标识key
     */
    String JWT_APPLICATION_ID_KEY = "application_id";
    /**
     * 客户端ID key
     */
    String JWT_CLIENT_ID_KEY = "client_id";

    /**
     * 组织部门ID
     */
    String JWT_DEPT_ID_KEY = "dept_id";
    /**
     * 行政编码key
     */
    String JWT_REGION_CODE_KEY = "region_code";

    /**
     * 行政编码名称key
     */
    String JWT_REGION_CODE_NAME_KEY = "region_name";

    /**
     * JWT存储权限前缀
     */
    String AUTHORITY_PREFIX = "ROLE_";

    /**
     * JWT存储权限属性
     */
    String JWT_AUTHORITIES_KEY = "authorities";

    /**
     * 授权类型
     */
    String GRANT_TYPE_KEY = "grant_type";

    /**
     * 刷新令牌
     */
    String REFRESH_TOKEN_KEY = "refresh_token";

    /**
     * 登出路径
     */
    String LOGOUT_PATH = "/oauth/logout";

    /**
     * 认证方式 jwt key
     */
    String AUTHENTICATION_METHOD_KEY = "authentication_method";

    /**
     * 超级管理员 角色名
     */
    String ROOT_ROLE = "SUPER_ADMIN";
    /**
     * 超级管理员默认角色ID
     */
    Long ROOT_USER_ID = 1L;

    /**
     * 统一登录入口 sso 客户端ID
     */
    String SSO_CLIENT_ID = "digital-village-web";

    /**
     * 小程序接口 路径
     */
    String APP_API_PATTERN = "/*/app-api/**";

    /**
     * 默认access_token有效时长 1小时
     */
    Integer DEFAULT_ACCESS_TOKEN_VALIDITY = 60 * 60;

    /**
     * 默认 refresh_token有效时长 7天
     */
    Integer DEFAULT_REFRESH_TOKEN_VALIDITY = 60 * 60 * 24 * 7;

    /**
     * PC管理端 客户端id命名后缀。
     */
    String PC_CLIENT_ID_SUFFIX = "-admin";
    /**
     * 移动端（H5/Android/IOS）客户端ID 命名后缀。
     */
    String APP_CLIENT_ID_SUFFIX = "-app";
    /**
     * 小程序端(微信小程序) 客户端id命名后缀。
     */
    String APPLETS_CLIENT_ID_SUFFIX = "-wxapp";
    /**
     * 开发环境接口-测试客户端命名后缀
     */
    String API_TEST_CLIENT_ID_SUFFIX = "-api-test";

    /**
     * 演示角色统一编码
     */
    String DEMO_ROLE_CODE = "DEMO";
    /**
     * 登录成功标识
     */
    short LOGIN_SUCCESS = 1;
    short LOGOUT_SUCCESS = 1;
    /**
     * 注销成功
     */

    /**
     * 登录失败标识
     */
    short LOGIN_FAIL = 0;
    /**
     * oauth注销路径
     */
    String OAUTH_LOGOUT_PATH = "/efarmcloud-auth/oauth/logout";

    /**************************** Redis key 常量 *************************/

    /**
     * 黑名单token前缀
     */
    String TOKEN_BLACKLIST_PREFIX = "auth:token:blacklist:";

    /**
     * url role关系表 key appId-123 注意`{}` 需要参数替换
     */
    String URL_PERM_ROLES_KEY = "system:url_roles_rule:appId-{}:";
    /**
     * 应用角色缓存key
     */
    String APP_ROLES_CACHE_KEY = "system:role_list:appId_{}:";
    /**
     * btn role关系表redis缓存key
     */
    String BTN_PERM_ROLES_KEY = "system:perm_roles_rule:btn:";

    /**
     * 客户端 在库名单redis缓存key
     */
    String CLIENT_STOCKLIST_KEY = "auth:client:stocklist:";
    /**
     * 系统应用列表redis缓存key
     */
    String APP_LIST_CACHE_KEY = "system:app_list:";

    /*
     * 部门子级列表的redis缓存key
     * */
    String DEPT_MAP_CACHE_KEY = "system:dept:dept_list:";

    /*
     * 小程序注册用户sign签名 redis缓存key
     * */
    String USER_REGISTER_SIGN_CACHE_KEY = "auth:register_sign:";


    /**
     * 用户授权时间缓存，string模式
     */
    String USER_AUTHORIZE_TIME = "user:authorize_time:";
}
